package com.future.controller;

import com.future.domain.DTO.PermissionDTO;
import com.future.domain.Result;
import com.future.service.IPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/permission")
public class PermissionController {

    @Autowired
    private IPermissionService permissionService;

    /**
     * 查询所有权限
     * @return 统一响应结果，包含权限列表
     */
    @GetMapping("/list")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result list() {
        return permissionService.listPermissions();
    }

    /**
     * 根据 ID 查询权限
     * @param id 权限 ID
     * @return 统一响应结果，包含权限信息
     */
    @GetMapping("/{id}")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result getById(@PathVariable Long id) {
        return permissionService.getPermissionById(id);
    }

    /**
     * 新增权限
     * @param permissionDTO 权限信息
     * @return 统一响应结果，包含操作结果
     */
    @PostMapping("/save")
    @PreAuthorize("hasAnyAuthority('超级管理员')")
    public Result save(@RequestBody PermissionDTO permissionDTO) {
        return permissionService.savePermission(permissionDTO);
    }

    /**
     * 更新权限
     * @param permissionDTO 权限信息
     * @return 统一响应结果，包含操作结果
     */
    @PutMapping("/update")
    @PreAuthorize("hasAnyAuthority('超级管理员')")
    public Result update(@RequestBody PermissionDTO permissionDTO) {
        return permissionService.updatePermission(permissionDTO);
    }

    /**
     * 根据 ID 删除权限
     * @param id 权限 ID
     * @return 统一响应结果，包含操作结果
     */
    @DeleteMapping("/{id}")
    @PreAuthorize("hasAnyAuthority('超级管理员')")
    public Result delete(@PathVariable Long id) {
        return permissionService.deletePermission(id);
    }

    /**
     * 分页查询权限
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 统一响应结果，包含分页权限信息
     */
    @GetMapping("/page")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result page(@RequestParam(defaultValue = "1") Integer pageNum,
                       @RequestParam(defaultValue = "10") Integer pageSize) {
        return permissionService.pagePermissions(pageNum, pageSize);
    }

    /**
     * 根据权限名称查询权限
     * @param permissionName 权限名称
     * @return 统一响应结果，包含权限列表
     */
    @GetMapping("/search")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result search(@RequestParam String permissionName) {
        return permissionService.searchPermissions(permissionName);
    }
}